package edu.upc.clase.demo.dao.impl;

import edu.upc.clase.demo.dao.EstadoDao;
import edu.upc.clase.demo.entity.Categoria;
import edu.upc.clase.demo.entity.Estado;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.sql.DataSource;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.EmptyResultDataAccessException;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.simple.SimpleJdbcDaoSupport;
import org.springframework.stereotype.Repository;

/**
 *
 * @author Carlos Ríos Rosales
 */
@Repository
public class EstadoDaoImpl extends SimpleJdbcDaoSupport implements EstadoDao {

  private static Logger log = LoggerFactory.getLogger(EstadoDaoImpl.class);

  @Autowired
  public EstadoDaoImpl(DataSource dataSource) {
    log.info("Asignando el dataSource");
    setDataSource(dataSource);
  }
  
  @Override
  public Integer insertar(Estado estado) {
    getJdbcTemplate().update(
            "insert into estado (codigo, descripcion, tipoEstado) Values (?, ?, ?)",
            estado.getCodigo(), estado.getDescripcion(), estado.getTipoEstado());
    return getSimpleJdbcTemplate().queryForInt("select last_insert_id()");
  }

  @Override
  public void actualizar(Estado estado) {
    getJdbcTemplate().update(
            "update estado set codigo = ?, descripcion = ?, tipoEstado = ? where idEstado = ?",
            estado.getCodigo(), estado.getDescripcion(), estado.getTipoEstado(), estado.getIdEstado());
  }

  @Override
  public void eliminar(Estado estado) { 
    getJdbcTemplate().update("delete from estado where idEstado = ?", estado.getIdEstado());
  }

  @Override
  public List<Estado> buscarTodos() {
    return getSimpleJdbcTemplate().query("select * from estado",
            new BeanPropertyRowMapper<Estado>(Estado.class));
  }

  @Override
  public List<Estado> buscarCodigo(String codigo) {
     try {
            Map<String,String> parametros = new HashMap<String,String>();
            parametros.put("tipoEstado","%"+codigo+"%");
            return getSimpleJdbcTemplate().query(
                    "select idEstado,descripcion from estado where tipoEstado = tipoEstado",
                    new BeanPropertyRowMapper<Estado>(Estado.class),parametros);
        } catch (EmptyResultDataAccessException e) {
            return null;
        }
  }

  @Override
  public Estado buscarIdEstado(Integer idEstado) {
    try {
      return getSimpleJdbcTemplate().queryForObject("select * from estado where idEstado=?",
              new BeanPropertyRowMapper<Estado>(Estado.class), idEstado);
    } catch (EmptyResultDataAccessException e) {
      return null;
    }
  }
}